#include<iostream>
#include<string>
#include<mysql/mysql.h>

const std::string host="127.0.0.1";
const std::string user="root";
const std::string passwd="123456";
const std::string db="new";
const unsigned int port=3306;
int main()
{
    // std::cout<<mysql_get_client_info()<<std::endl;
    MYSQL*my=mysql_init(nullptr);
    if(my==nullptr)
    {
        std::cerr<<"init MYSQL error"<<std::endl;
        return 1;
    }
    if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),port,nullptr,0)==nullptr)
    {
        std::cerr<<"connect MYSQL error"<<std::endl;
        return 2;
    }
    std::cout<<"connect success"<<std::endl;
    mysql_set_character_set(my,"utf8");

    std::string sql;
    while(true)
    {
        std::cout<<">>>";
        if(!std::getline(std::cin,sql)) break;
        if(sql=="quit") break;
        int n=mysql_query(my,sql.c_str());
        if(n==0)
        {
            std::cout<<sql<<" success: "<<n<<std::endl;
        }
        else
        {
            std::cerr<<sql<<" failed "<<n<<std::endl; 
        }
        MYSQL_RES *res=mysql_store_result(my);
        if(res==nullptr)
        {
            std::cerr<< "mysql_store_result error"<<std::endl;
            return 4;
        }
        int16_t rows=mysql_num_rows(res);
        int fields=mysql_num_fields(res);
        std::cout<<" 行 :  "<<rows<<std::endl;
        std::cout<<" 列 : "<<fields<<std::endl;

        MYSQL_FIELD*fields_array=mysql_fetch_fields(res);
        for(int i=0;i<fields;i++)
        {
            std::cout<<fields_array[i].name<<"\t";
        }
        std::cout<<"\n";
        for(int i=0;i<rows;i++)
        {
            MYSQL_ROW row=mysql_fetch_row(res);
            for(int j=0;j<fields;j++)
            {
                std::cout<<row[j]<<"\t";
            }
            std::cout<<"\n";
        }
        mysql_free_result(res);
    }

    mysql_close(my);
    return 0;
}